V okně programu můžeme vytvářet různé prvky, na které jsme zvyklí při používání běžných programů. Nyní si ukážeme, jak vytvořit tlačítko a jak mu nastavit, co má po kliknutí udělat.
#############
# 15_1.py #
#############
import tkinter
import random
canvas = tkinter.Canvas(width=300,height=200)
canvas.pack()
def ctverec(x, y, info):
canvas.create_rectangle(x-10, y-10, x+10, y+10)
canvas.create_text(x, y, text=info)
def button1_klik():
ctverec(random.randrange(300), random.randrange(200), random.randrange(100))
button1 = tkinter.Button(text='Kresli čtverec', command=button1_klik)
button1.pack()
canvas.mainloop()
Pomocí příkazu tkinter.Button vytvoříme tlačítko. V příkazu nastavíme text zobrazený na tlačítku a příkaz, který se provede po kliknutí na tlačítko. Odkaz na nové tlačítko jsme uložili do proměnné button1. Položka button1.pack() zajišťuje zobrazení nového tlačítka. V programu jsme ještě vytvořili funkci button1_click, která je nastavena jako příkaz pro toto tlačítko command = button1_click. V tomto funkci zapíšeme, co všechno se má stát po stisknutí tlačítka.
Další program již obsahuje dvě tlačítka, přičemž druhé z nich vykreslí hned vedle sebe 10 čtverečků, postupně s čísly 1 až 10.
#############
# 15_2.py #
#############
import tkinter
import random
canvas = tkinter.Canvas(width=300,height=200)
canvas.pack()
def ctverec(x, y, info):
canvas.create_rectangle(x-10, y-10, x+10, y+10)
canvas.create_text(x, y, text=info)
def button1_klik():
ctverec(random.randrange(300), random.randrange(200), random.randrange(100))
def button2_klik():
for i in range(1, 11):
ctverec(i*20, 100, i)
button1 = tkinter.Button(text='Kresli čtverec', command=button1_klik)
button1.pack()
button2 = tkinter.Button(text='Čtverce', command=button2_klik)
button2.pack()
canvas.mainloop()
Kromě tlačítek můžeme mít v programu také prvek Entry, který slouží k zadávání vstupních údajů do programu (textové pole):
#############
# 15_3.py #
#############
import tkinter
import random
canvas = tkinter.Canvas(width=400,height=300)
canvas.pack()
def ctverec(x, y, info):
canvas.create_rectangle(x-10, y-10, x+10, y+10)
canvas.create_text(x, y, text=info)
def button1_klik():
ctverec(random.randrange(300), random.randrange(200), random.randrange(100))
def button2_klik():
for i in range(1, 11):
ctverec(i*20, 100, i)
def button3_klik():
ctverec(random.randrange(300), random.randrange(200), entry1.get())
button1 = tkinter.Button(text='Kresli čtverec', command=button1_klik)
button1.pack()
button2 = tkinter.Button(text='Čtverce', command=button2_klik)
button2.pack()
button3 = tkinter.Button(text='Piš', command=button3_klik)
button3.pack()
entry1 = tkinter.Entry()
entry1.pack()
canvas.mainloop()
Zápisem entry1 = tkinter.Entry() jsme vytvořili okno, do kterého můžeme zadávat text (někdy se mu říká vstupní nebo textové pole). Odkaz na toto vstupní pole jsme uložili do proměnné entry1. Potřebujeme jej také zobrazit příkazem pack(). Při vykreslování čtverce po kliknutí na tlačítko 3 použijeme funkci entry1.get(), která vyhledá aktuální údaje v našem entry1 a vykreslí je do čtverce:
Následující program vykreslí posloupnost čtverců vedle sebe podle informací na vstupu. Vstupních polích entry1 a entry2. V prvním poli zadáme, od kterého čísla chceme smyčku opakovat, ve druhém, do kterého čísla chceme smyčku opakovat (kromě tohoto). V programu jsme ještě museli použít funkci int(), která převádí číslo v textové podobě na celé číslo (jako číselnou hodnotu), se kterou můžeme pracovat jako s běžným číslem.
#############
# 15_4.py #
#############
import tkinter
canvas = tkinter.Canvas(width=800,height=200)
canvas.pack()
def ctverec(x, y, info):
canvas.create_rectangle(x-10, y-10, x+10, y+10)
canvas.create_text(x, y, text=info)
def button1_klik():
od = int(entry1.get())
do = int(entry2.get())
for i in range(od, do):
ctverec(i*20, 100, i)
button1 = tkinter.Button(text='Posloupnost', command=button1_klik)
button1.pack()
entry1 = tkinter.Entry()
entry1.pack()
entry2 = tkinter.Entry()
entry2.pack()
canvas.mainloop()
💾 Přidejte do programu tlačítko “Smaž”, která zavolá funkci obsahující příkaz pro smazání grafické plochy.
Vytvořte program 15_znacky.py, který na místo kliknutí vykreslí dopravní značku začátek/konec obce. V programu jsou dvě vstupní pole. Do jednoho zadáváme název obce a do druhé zadáváme, zda se má vykreslit značka začátku nebo konce obce. Značka konec obce se vykreslí, pokud do druhého pole zadáme písmeno „k“. V programu bude také tlačítko, které vymaže grafickou plochu:
Vytvořte program 15_svisle1.py, ve kterém můžeme kreslit sousedící svislé čáry v místě kliknutí myší. V programu jsou dvě vstupní pole. V jedné zadáváme počet čar. Ve druhé velikost mezery mezi čarami. Začátek čáry je posunut od předchozí čáry o náhodný posun z intervalu −1 až +1. Barva čar je náhodně vybrána z předem definovaných hodnot. V ukázce jsou 4 různé odstíny modré (blue1, blue2, blue3 a blue4). V programu bude také tlačítko, které vymaže grafickou plochu.
Vytvořte kopii předchozího programu pod názvem 15_svisle2.py. Přidejte do programu další pole, kterou lze použít k určení délky čar.
Napište program 15_kalkulacka.py, který bude obsahovat tři vstupní pole: pro zadání dvou čísel a pro operaci: +, -, * a /. Dále dvě tlačítka “Vypočítat” a “Smazat”. Program do grafické plochy vypíše celý příklad, např. 4 + 7 = 11.